#-*- coding: utf8 -*-
from tutor.script import *
from tutor.plugin.maple import *

# meta-informação
meta(author       = 'Fábio Mendes',
     creationdate = datetime(2010, 10, 9),
     status       = 'testing',
     difficulty   = 'easy',
     time         = 10,
     itemtype     = 'test')

# begin question: derivadas condicionais utilizando exemplo da termodinâmica

# sorteia função concava
conc_f = oneof(M.ln, M.sqrt, M('x->-exp(-x)'), M('x->-x**2'))

# sorteia numeros inteiros para servirem de expoente
n = lambda: M(randint(1, 4))
a = n() - 2
b = n() / 2

# escreve a energia
p, V, T = M('(p, V, T)')
nR = M.nR
U = simplify(V * conc_f((p/T)**a) + b * nR * T)
eq = M('p * V - n * R * T')
M('assume(V>0, T>0, U::real, nR>0, p>0)')

question(u'A energia de um gás ideal é dada pela fórmula\n'
          '$$U(p, V, T) = ', U, '$$\n'
          'com a restrição que o mesmo obedeça à equação $pV = nRT$. Calcule '
          'as derivadas:\n\n'
          'I) $\\left(\\frac {\\partial U}{\\partial p} \\right)_V$.')
multiplechoice()

# neste caso temos p e V como variáveis independentes e T e U dependentes
Td = p*V/nR
ans = simplify(diff(subs(T==Td, U), p))

# no outro caso temos p e T como variáveis independentes e V e U dependentes
Vd = nR*T/p
ans_other = simplify(diff(subs(V==Vd, U), p))

# choice: (a)
choice_eq(0.5, simplify(subs(T==Td, ans)))
explanation('Escolha correta!') 

# choice: (b)
choice_eq(0.25, simplify(subs(T==Td, ans_other)))
explanation(u'Diferenciou por $p$, mantendo $T$ constante e $V$ variável. Deveria '
             'ter feito o contrário!') 

# choice: (c)
choice_eq(-0.1, simplify(subs(T==Td, diff(U, p))))
explanation('$T$ depende implicitamente de $p$ e deve ser tratado na equação '
            'acima como $T=T(p,V)$. Para encontrar $\\frac {\\partial T}{\\partial{p}$, '
            'derivamos a equação do gás ideal $pV = nRT$ por $p$.') 

# choice: (d)
choice_eq(-0.1, simplify(subs(T==Td, diff(U, p, V))))
explanation('Diferenciou por $p$ e depois por $V$. Era para calcular a derivada'
             'com relação a $p$ mantendo $V$ constante!') 

question('\n\nII) $\\left(\\frac {\\partial U}{\\partial p} \\right)_T$.')
multiplechoice()

# choice: (a)
choice_eq(0.5, simplify(subs(V==Vd, ans_other)))
explanation('Escolha correta!') 

# choice: (b)
choice_eq(-0.1, simplify(subs(V==Vd, diff(U, p))))
explanation('$V$ depende implicitamente de $p$ e deve ser tratado na equação '
             'acima como $V=V(p,T)$. Para encontrar $\\frac {\\partial V}{\\partial p}$, ' 
             'derivamos a equação do gás ideal $pV = nRT$ por $p$.') 

# choice: (c)
choice_eq(-0.1, simplify(subs(V==Vd, diff(U, p, T))))
explanation('Diferenciou por $p$ e depois por $T$. Era para calcular a derivada '
             'com relação a $p$ mantendo $T$ constante!') 

# choice: (d)
choice_eq(-0.1, simplify(subs(V==Vd, diff(U, p, V))))
explanation('Diferenciou por $p$ e depois por $V$. Era para calcular a derivada '
             'com relação a $p$ mantendo $T$ constante!') 

end()